//
//
import * as dec from "common/decorator";
//
import * as dbtps from "../types";
import { BaseCommand } from "../base";
import Document from "../model/document";
/**
 * 数据公用命令。（优先收到通知）
 * 为必要的数据做绑定或同步，或校验数据。
 * 例如有文档被激活时，需要将该文档的历史记录设置为全局历史记录。
 * 例如当用户名被设置为 "" 时，收到数据通知后将密码也设置为空。（防止开发遗漏清空密码）
 * 例如骨架名被设置为重名，自动命名为其他名称，由于 api 都是装饰器装饰的，在内部实现防御就失去了装饰器的优势，也更麻烦，还要处理报错和通知等。
 */
export default class ModelCommand extends BaseCommand<any, any> {
    public execute(): void {
        switch (this.notification.type) {
            case dbtps.MNotificationType.None:
                break;

            case dbtps.MNotificationType.ApplicationActiveDocumentChange:
                dec.setHistory((this.notification.data as Document).history); // 当前的激活文档更改时，全局历史记录需要同步变更。
                break;

            case dbtps.MNotificationType.ApplicationOpenDocument:
                break;

            case dbtps.MNotificationType.ApplicationCloseDocument:
                if (this.application.currentDocument === this.notification.data as Document) { // 当有文档关闭时，如果其为激活文档，则变更激活文档。
                    if (this.application.documents.length > 0) {
                        this.application.currentDocument = this.application.documents[0];
                    }
                    else {
                        // 打开欢迎页。
                    }
                }
                break;

            default:
                break;
        }
    }
}